package be.ipl.finito.servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import be.ipl.finito.domaine.Joueur;
import be.ipl.finito.exception.InscriptionErreur;
import be.ipl.finito.usecases.GestionJoueur;
import be.ipl.finito.util.Util;

/**
 * Servlet implementation class Inscription
 */
@WebServlet(name = "servletInscription.html")
public class Inscription extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@EJB
	private GestionJoueur gestionJoueur;
	
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		this.getServletContext().getNamedDispatcher("index.html")
			.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		/*
		 * Verification du remplissage 
		 */
		String nom = request.getParameter("nom");
		String prenom = request.getParameter("prenom");
		String login = request.getParameter("login");
		String motDePasse = request.getParameter("motDePasse");
		String motDePasseConf = request.getParameter("motDePasseConf");
		String email = request.getParameter("email");
		
		boolean erreur = false;
		String param = "?maj=1&";
		
		if(nom == null || nom.isEmpty()) {
			erreur = true;
		} else {
			param += "nom="+ nom +"&";
		}
		
		if(prenom == null || prenom.isEmpty()) {
			erreur = true;
		} else {
			param += "prenom="+ prenom +"&";
		}
		
		if(login == null || login.isEmpty()) {
			erreur = true;
		} else {
			param += "login="+ login +"&";
		}
		
		if((motDePasse == null || motDePasse.isEmpty()) && (motDePasseConf == null || motDePasseConf.isEmpty())) {
			erreur = true;
		} else if(!motDePasseConf.equals(motDePasse)) {
			erreur = true;
		}
		
		if(email == null || email.isEmpty() || !Util.checkEmail(email)) {
			erreur = true;
		} else {
			param += "email="+ email +"&";
		}
		
		// il y a au moins une erreur
		if(erreur) {
			response.sendRedirect("inscription.html"+param);
			return;
		}
		
		// Inscription du joueur
		Joueur joueur = new Joueur(nom, prenom, login, email, motDePasse);
		
		try {
			gestionJoueur.inscrireJoueur(joueur);
			
			final ServletContext context = getServletContext();
			List<Joueur> listJoueursConnectes = (List<Joueur>) context.getAttribute("joueursConnectes");
			
			if(listJoueursConnectes == null) {
				listJoueursConnectes = new ArrayList<Joueur>();
				listJoueursConnectes.add(joueur);
			} else {
				listJoueursConnectes.add(joueur);
			}
			
			synchronized (context) {
				context.setAttribute("joueursConnectes", listJoueursConnectes);
			}
			
			this.getServletContext().getNamedDispatcher("servletLogin.html").forward(request, response);
			
			return;
		} catch (InscriptionErreur e) {
			response.sendRedirect("inscription.html?message="+ e.getMessage());
			return;
		}
	}
}
